package plp.functional2.primitive;

import java.util.List;

import plp.expressions2.expression.Id;
import plp.expressions2.memory.AmbienteCompilacao;
import plp.expressions2.memory.VariavelJaDeclaradaException;
import plp.expressions2.memory.VariavelNaoDeclaradaException;

public class Clausula {
	
	List<Id> id;
	Primitiva primitiva;
	
	/**
	 * @param id Lista de identificadores
	 * @param exp Lista de Primitivas
	 */
	public Clausula(List<Id> id , Primitiva exp){
		this.id = id;
		this.primitiva = exp;
	}
	
	/**
	 * @return Lista de Identificadores
	 */
	public List<Id> getID() {
		return id;
	}

	/**
	 * @return Lista de Primitivas 
	 */
	public Primitiva getPrimitivas() {
		return this.primitiva;
	}
	
	/**
	 * 
	 * @param ambiente
	 * @return booleano
	 * @throws VariavelNaoDeclaradaException
	 * @throws VariavelJaDeclaradaException
	 */
	public boolean checaTipo(AmbienteCompilacao ambiente)
					throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
		
		Id tmpId = null;
		boolean idChecado = false;
		
		for (int i = 0; i<id.size(); i++) {
			tmpId = id.get(i);
			idChecado = tmpId.checaTipo(ambiente);
			if (!idChecado){
				break;
			}
		}
		
		boolean primitivaChecada = primitiva.checaTipo(ambiente);
	
		return (idChecado && primitivaChecada);
	}

}